package com.sulent.frame.web.config;

import net.javacrumbs.shedlock.core.LockProvider;
import net.javacrumbs.shedlock.provider.redis.spring.RedisLockProvider;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.redis.connection.RedisConnectionFactory;

@Configuration
public class ShedLockConfig {
//默认使用的是beanName=lockProvider的支持驱动，spring中只要有一个beanName=lockProvider，不管定义顺序先后都会使用它
//如果找不到指定名称的驱动，就根据类型匹配，此时如果数据库里面出现了两个类型一样的LockProvider的bean，执行任务会报错，如果只有一个就使用唯一类型的，也可用@Primary注解指定优先使用的驱动
/*
    @Bean
    public LockProvider mysqlLockProvider(DataSource dataSource) {
        return new JdbcTemplateLockProvider(dataSource);
    }
*/
    @Bean
    @Primary
    //我不想创建表。所以我优先使用了redis的驱动支持类
    public LockProvider redisLockProvider(RedisConnectionFactory redisConnectionFactory) {
        return new RedisLockProvider(redisConnectionFactory);
    }
}